package os;

import java.io.File;
import vm.ProgramFile;

/**
 *
 * @author Paulius Dambrauskas
 */
class JCL extends Process {
    String[] task;
    String program;
    String[] pars;
    @Override
    public void runProcess() {
        this.changeStepCell(step);
        switch (step){
            case 1:{
                //changeStepCell(1);
                OS.askRes("Užduotis", selfId);
                incStep(1);
                break;
            }
            case 2:{
                //changeStepCell(2);
                OS.askRes("3 Kanalas", selfId);
                incStep(1);
                break;
            }
            case 3:{
                //changeStepCell(3);
                //Skaitomas failas
                OS.window.processor.getCH3().setRegisterValue("1");
                task = (String[]) this.takeFromGivenResources("Užduotis").value;
                program = new ProgramFile(new File(task[0])).content;
                //Skaitymo simuliacija
                OS.sheduler();
                this.setState(2);
                OS.readyList.add(selfId);
                
                incStep(1);
                break;
            }
            case 4:{
                //changeStepCell(4);
               //Sintaksė gera, jei faila nuskaite
                boolean valid = false;
                if(!program.equals("NULL"))
                    valid = true;
                if(valid)
                    incStep(2);
                else
                    incStep(1);
                break;
            }
            case 5:{
                //changeStepCell(5);
                //tuščia ji jau... kai pasiemė JCL tokia patapo
                System.out.println("Užduotis sunaikinta");
                OS.window.processor.getCH3().setRegisterValue("0");
                setStep(1);
                break;
            }
            case 6:{
                //changeStepCell(6);
                OS.freeRes(this.takeFromGivenResources("3 Kanalas"));
                OS.window.processor.getCH3().setRegisterValue("0");
                incStep(1);
                break;
            }
            case 7:{
                //changeStepCell(7);
                try{
                    pars = task[1].split(" ");
                } catch (Exception e){}
                incStep(1);
                break;
            }
            case 8:{
                //changeStepCell(8);
                OS.freeRes(new ResourceElement("Užduoties duomenys", new Object[]{pars, program}));
                setStep(1);
                break;
            }
                
        }
    }
    
}
